#!/usr/bin/env python
# -*- coding:utf-8 -*-

"""
@author zyx
@since 2022/1/28 23:19
@file: c04_bs4入门案例.py
"""

from bs4 import BeautifulSoup

# fp就表示本地存储的一个html文件
fp = open('./resource/test.html', 'r', encoding='utf-8')
# 解析本地存储的html文件中的内容
# 实例化BeautifulSoup对象，然后把即将被解析的页面源码数据加载到了该对象中
# 参数2，lxml是固定形式，表示指定的解析器
soup = BeautifulSoup(fp, 'lxml')
fp.close()

# 标签定位
# 方式1：soup.tagName,只会定位到符合条件的第一个标签
# 定位到了title标签
tag1 = soup.title
# print(tag1)  # <title>测试bs4</title>
# print(type(tag1))  # <class 'bs4.element.Tag'>

# 方式2：属性定位，find函数，findall函数
# find('tagName',attrName='attrValue')：find只会定位到满足要的第一个标签
# 定位class属性值为song的div标签, 注意: class为关键自
tag3 = soup.find('div', class_='song')
# 定位id属性值为feng的a标签
tag4 = soup.find('a', id='feng')
# print(type(tag4)) # <class 'bs4.element.Tag'>1
tag4_1 = soup.find('a', alt='qi')
# findAll('tagName',attrName='attrValue')：可以定位到满足要求的所有标签
tag5 = soup.findAll('a', class_='du')
# print(type(tag5)) # <class 'bs4.element.ResultSet'>

# 方式3：选择器定位：soup.select('选择器')
#       id选择器：#feng  ----id为feng
#       class选择器：.song ----class为song
#       层级选择器：大于号表示一个层级，空格表示多个层级
# 定位到所有id属性值为feng的标签
tag6 = soup.select('#feng')
# 定位到所有class属性值为song的标签
tag7 = soup.select('.song')
# 定位到了class为tang下面的ul下面所有的li标签
tag8 = soup.select('.tang > ul > li')
print(tag8)
tag9 = soup.select('.tang li')
# print(tag9)


